package org.squarecap.apps.eventcompanion.util;

import java.util.List;

import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.squarecap.apps.eventcompanion.domain.Evento;
import org.squarecap.apps.eventcompanion.domain.Usuario;

public class Validators {

	public static void validateUsuario(Usuario usuario,
			BindingResult bindingResult) {
		if (!usuario.getClave().equals(usuario.getConfirmacionClave())) {
			bindingResult.addError(new FieldError(
					bindingResult.getObjectName(), "confirmacionClave", usuario
							.getConfirmacionClave(), false,
					new String[] { "error_password_does_not_match" },
					new Object[] {}, ""));
		}
	}

	public static void validateEvento(Evento eventoValidar,
			BindingResult bindingResult) {
		List<Evento> eventos = Evento.findAllEventoes();
		for (Evento evento : eventos) {
			if (evento.getId() == eventoValidar.getId()) {
				continue;
			}
			if (evento.getSala().getId() == eventoValidar.getSala().getId()) {
				if (!validateDatesInEvents(eventoValidar, evento)) {
					bindingResult.addError(new FieldError(bindingResult
							.getObjectName(), "fechaYHoraInicio", eventoValidar.getFechaYHoraInicio(), false,
							new String[] { "error_event_overlap" },
							new Object[] {}, ""));
				}
			}
		}
	}

	public static boolean validateDatesInEvents(Evento eventA, Evento eventB) {
		boolean validation = true;
		System.out.println("<<<<<<<< COMPARANDO A : " + eventA.getFechaYHoraInicio() + " to " + eventA.getFechaYHoraFin() + ">>>>>>>>>>>>>>");
		System.out.println("<<<<<<<< COMPARANDO B : " + eventB.getFechaYHoraInicio() + " to " + eventB.getFechaYHoraFin() + ">>>>>>>>>>>>>>");
		if (eventA.getFechaYHoraInicio().after(eventB.getFechaYHoraInicio())
				&& eventA.getFechaYHoraInicio().before(
						eventB.getFechaYHoraFin())) {
			validation = false;
		}
		if (eventA.getFechaYHoraFin().after(eventB.getFechaYHoraInicio())
				&& eventA.getFechaYHoraFin().before(eventB.getFechaYHoraFin())) {
			validation = false;
		}
		return validation;
	}

}
